#define _CRT_SECURE_NO_WARNINGS 1

#include <functional>
#include <iostream>
#include <queue>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string s;
    while (cin >> s)
    {
        int hash[999] = { 0 };
        for (auto ch : s)
        {
            hash[ch]++;
        }

        priority_queue<int, vector<int>, greater<int>> heap;
        for (int i = 0; i < 999; i++)
        {
            if (hash[i]) heap.push(hash[i]);
        }

        int ret = 0;
        while (heap.size() > 1)
        {
            int t1 = heap.top();
            heap.pop();
            int t2 = heap.top();
            heap.pop();
            ret += t1 + t2;
            heap.push(t1 + t2);
        }
        cout << ret << endl;
    }
    return 0;
}
//#include <iostream>
//#include <string>
//
//using namespace std;
//
//int main()
//{
//    string s;
//    int hash[26] = { 0 };
//    int maxx = 0;
//    char ret;
//    while (cin >> s)
//    {
//        for (auto ch : s)
//        {
//            if (++hash[ch - 'a'] > maxx)
//            {
//                ret = ch;
//                maxx = hash[ch - 'a'];
//            }
//        }
//    }
//
//    cout << ret << endl;
//    return 0;
//}